import axios from "axios";
import {ElMessage} from "element-plus";
import router from "@/router";

// 创建 axios 实例
const instance = axios.create({
  baseURL: "/api", // 通过 vite 代理转发到后端
  timeout: 15000
});

// 请求拦截：附加 token
instance.interceptors.request.use(
  config => {
    const token = localStorage.getItem("token");
    if (token) {
      // 后端拦截器从 header 的 token 读取
      config.headers["token"] = token;
    }
    return config;
  },
  error => Promise.reject(error)
);

// 响应拦截：统一处理业务 code 与 401
instance.interceptors.response.use(
  response => {
    const data = response.data;
    if (data && data.code === 0) {
      return data;
    }
    
    // 处理权限错误
    if (data && data.code === 403) {
      ElMessage.error("无权访问该资源");
      // 可以根据用户角色跳转到对应首页
      const userRole = localStorage.getItem('userRole');
      if (userRole === 'student') {
        router.replace('/student/activity');
      } else {
        router.replace('/school/dashboard');
      }
      return Promise.reject(data);
    }
    
    // 非 0 视为业务失败，交给业务代码处理
    return Promise.reject(data);
  },
  error => {
    // 处理 401 未授权：清理并跳转登录
    if (error?.response?.status === 401) {
      localStorage.removeItem("token");
      localStorage.removeItem("userRole");
      localStorage.removeItem("userInfo");
      ElMessage.error("登录已过期，请重新登录");
      if (router.currentRoute.value.path !== "/login") {
        router.replace({path: "/login"});
      }
    }
    return Promise.reject(error);
  }
);

export default instance